package org.example.mqtt.data;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseUtils;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.provider.BaseColumns;
import android.util.Log;
public class NotificationData extends SQLiteOpenHelper {
private static final String TAG = "NotificationData";
private static final String DATABASE_NAME = "mqtt_notif.db";
private static final int DATABASE_VERSION = 3;
public static final String TABLE_NAME = "notification";
public static final String _ID = BaseColumns._ID;
public static final String SERVICE_ID = "service_id"; // string
public static final String ALERT_TYPE = "alert_type"; // string
public static final String DESCRIPTION = "description"; // string
public static final String SERVER_TIME = "server_time"; // string - > ISO 8601 time
public static final String VALUE = "value"; // string
public static final String THREAT_ID = "threat_id"; // string
public static final String THRESHOLD = "threshold"; // int
public static final String SERVICE_FULL_URI = "service_uri"; // string
public static final String [] COLUMNS = {_ID,SERVICE_ID,ALERT_TYPE,DESCRIPTION,SERVER_TIME,VALUE,THREAT_ID,THRESHOLD,SERVICE_FULL_URI};
@Override
public void onCreate(SQLiteDatabase db) {
String sql =
"CREATE TABLE " + TABLE_NAME + " ("
+ _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ SERVICE_ID + " TEXT NOT NULL, "
+ ALERT_TYPE + " TEXT, "
+ DESCRIPTION + " TEXT, "
+ SERVER_TIME+ " BIGINT, "
+ VALUE+ " TEXT, "
+ THREAT_ID + " TEXT, "
+ THRESHOLD + " INTEGER,"
+ SERVICE_FULL_URI + " TEXT"
+ ");";
db.execSQL(sql);
}
public NotificationData(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version "
+ oldVersion + " to " + newVersion
+ ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
/*
// TODO: possibly make it assynchronous
// inserts notification on the db
public void insert(String service_id, String alert_type, String description,
String server_time,String value,String threat_id, int threshold) {
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put(SERVICE_ID, service_id);
values.put(ALERT_TYPE, alert_type);
values.put(DESCRIPTION, description);
values.put(SERVER_TIME, server_time);
values.put(VALUE, value);
values.put(THREAT_ID, threat_id);
values.put(THRESHOLD, threshold);
db.insertOrThrow(TABLE_NAME, null, values);
}
// TODO: implement the order by
// pass as input the controlling activity and an array of collumn X value to filter one
public Cursor all(Activity activity, String[] columns, String[] values ) {
String[] from = null; // means all columns
//{ _ID, SERVICE_ID, ALERT_TYPE, DESCRIPTION, SERVER_TIME, VALUE,THREAT_ID,THRESHOLD };
String whereClause = null;
String[] whereArgs = null;
String orderBy = null;
// sanity check and possibly setting whereClause and whereArgs
if (null != columns && null != values){
// check if have same number of items, check if collumns matchers a collumn name
if (columns.length != values.length)
return null;
if(checkColumns(columns) == false )
return null;
// setting whereClause and whereArgs
for(int i=0; i<columns.length; i++){
whereClause += columns[i] + " = ?";
if(i< (columns.length-1) )
whereClause += " AND ";
}
whereArgs = values;
}else{
// if just one of them is null, we return a null cursor
if(!(null == columns && null == values)){
Log.d(TAG, "number of collumns mistmacth nb of values when querying");
return null;
}
}
// db
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, from, whereClause, whereArgs, null, null, orderBy);
activity.startManagingCursor(cursor);
return cursor;
}
*/
public long count() {
SQLiteDatabase db = getReadableDatabase();
return DatabaseUtils.queryNumEntries(db, TABLE_NAME);
}
// check if columns in the array are valid
public static boolean checkColumns(String[] columns){
for(int i=0; i<columns.length;i++){
if ( isValidColumn(columns[i]) == false)
return false;
}
return true;
}
// check if column is valid
public static boolean isValidColumn(String column){
for(int i=0; i<COLUMNS.length;i++){
if(column.equals(COLUMNS[i]))
return true;
}
return false;
}
}